package it.azienda.managerworkstandard.view;

import it.azienda.framework.persistenza.DAOConnectionSingleton;
import it.azienda.framework.view.Dettaglio;
import it.azienda.managerworkstandard.modello.BeanFatturaAcquistoDett;
import it.azienda.managerworkstandard.modello.BeanFornitoreCont;
import java.util.ArrayList;
import org.hibernate.Query;
import org.hibernate.Session;

public class DettaglioFornitoreCont extends Dettaglio{
    
    
    public DettaglioFornitoreCont() { }
    
    
    public ArrayList situazione(Integer idFornitore){
        ArrayList listaFornitoreCont=new ArrayList();
        try{
            String query="select fatturaAcqDett from BeanFatturaAcquisto fatturaAcq, BeanFatturaAcquistoDett fatturaAcqDett" +
                    " where fatturaAcq.beanFornitore.id = :idFornitore" +
                    " and fatturaAcqDett.beanFatturaAcquisto.id = fatturaAcq.id";
            Query q=null;
            Session sessione = DAOConnectionSingleton.newSession();
            DAOConnectionSingleton.beginTransaction();
            q = sessione.createQuery(query);
            q.setInteger("idFornitore", idFornitore.intValue());
            ArrayList lista = (ArrayList) q.list();
            DAOConnectionSingleton.commitTransaction();
            
            if(lista.size()!=0){
                
                Double dare = new Double(0);
                Double avere = new Double(0);
                
                Integer id=new Integer(0);
                Double differenza= new Double(0);
                
                for(int i=0;i<lista.size();i++){
                    BeanFatturaAcquistoDett beanFatturaAcquistoDett =(BeanFatturaAcquistoDett)lista.get(i);
                    if(beanFatturaAcquistoDett.getBeanFatturaAcquisto().getId().intValue() != id.intValue()){
                        id = beanFatturaAcquistoDett.getBeanFatturaAcquisto().getId();
                        BeanFornitoreCont beanFornitoreCont = new BeanFornitoreCont();
                        String descrizione = "";
                        descrizione += "Fattura numero "+beanFatturaAcquistoDett.getBeanFatturaAcquisto().getNumeroFattura();
                        String[] splitData = beanFatturaAcquistoDett.getBeanFatturaAcquisto().getData().toString().split("-");
                        descrizione += " - del "+splitData[2].toString()+"/"+splitData[1].toString()+"/"+splitData[0].toString();
                        
                        beanFornitoreCont.setDescrizione(descrizione);
                        beanFornitoreCont.setDare(beanFatturaAcquistoDett.getBeanFatturaAcquisto().getTotale());
                        differenza = arrotonda(new Double(differenza.doubleValue() +  beanFatturaAcquistoDett.getBeanFatturaAcquisto().getTotale().doubleValue()),2);
                        beanFornitoreCont.setDifferenza(differenza);
                        listaFornitoreCont.add(beanFornitoreCont);
                    }
                    
                    if(beanFatturaAcquistoDett.getImportoRata()!=null){
                        if(beanFatturaAcquistoDett.getPagato().equals("S")){
                            BeanFornitoreCont beanFornitoreCont = new BeanFornitoreCont();
                            String[] splitData = beanFatturaAcquistoDett.getScadenza().toString().split("-");
                            String descrizione = "";
                            descrizione += "Fattura "+beanFatturaAcquistoDett.getBeanFatturaAcquisto().getNumeroFattura()+
                                    ": Pagata Rata n."+beanFatturaAcquistoDett.getNumRata()+"/"+beanFatturaAcquistoDett.getBeanFatturaAcquisto().getNumeroRate()+
                                    ", il "+splitData[2].toString()+"/"+splitData[1].toString()+"/"+splitData[0].toString();
                            beanFornitoreCont.setDescrizione(descrizione);
                            beanFornitoreCont.setAvere(beanFatturaAcquistoDett.getImportoRata());
                            differenza = arrotonda(new Double(differenza.doubleValue() - beanFatturaAcquistoDett.getImportoRata().doubleValue()),2);
                            beanFornitoreCont.setDifferenza(differenza);
                            listaFornitoreCont.add(beanFornitoreCont);
                        }
                    }
                }
            }
        }catch(Exception e){
            e.printStackTrace();e.printStackTrace();
            System.out.println("Errore"+e);
        } finally {
            DAOConnectionSingleton.closeSession();
        }
        return listaFornitoreCont;
    }
    
    public Double arrotonda(Object obj,int precisione){
        Double valore=(Double)obj;
        Double valoreArr=new Double(0);
        double pot = Math.pow(10, precisione);
        double  v = valore.doubleValue() * pot;
        valoreArr = new Double(Math.round(v) / pot);
        return valoreArr;
    }
}
